package com.aseo.business.hibernate;

import java.util.List;
import java.util.Set;

import javax.annotation.Resource;
import javax.validation.ConstraintViolation;

import org.springframework.stereotype.Service;

import com.aseo.exception.ConstraintViolationException;
import com.aseo.model.dao.Dao;
import com.aseo.model.entity.hibernate.Ruta;
import com.aseo.model.entity.hibernate.TrayectoRuta;
import com.aseo.util.Estado;

@Service
public class RutaManager implements ManagerInterface<Ruta> {

	@Resource  
	private Dao dao;
	
	@Override
	public List<Ruta> getAll() {
		final List<Ruta> list = dao.find(Ruta.class);  
	    return list;
	}

	@Override
	public void persist(Ruta t) {
		dao.persist(t);
	}
	
	public void validate(Ruta ruta) throws ConstraintViolationException {

		Set<ConstraintViolation<Ruta>> constraintViolations = dao.validate(ruta);
		
		for (ConstraintViolation<Ruta> constraintViolation : constraintViolations) {
			throw new ConstraintViolationException(constraintViolation.getMessage());
		}
		
	}
	
	public List<Ruta> getActivos() {
		final List<Ruta> list = dao.find("select ruta from com.aseo.model.entity.hibernate.Ruta ruta where ruta.estado = " + Estado.ACTIVO);  
	    return list;
	}
	
	public List<TrayectoRuta> getTrayectosActivos (Ruta ruta){
		List<TrayectoRuta> list = dao.find("select trayecto from com.aseo.model.entity.hibernate.TrayectoRuta trayecto where trayecto.estado = " + Estado.ACTIVO + " and" +
				" trayecto.rutaId.rutaId = " + ruta.getRutaId() + " order by trayecto.orden");
		return list;
	}
	
	public List<TrayectoRuta> getTrayectosInactivos (Ruta ruta){
		List<TrayectoRuta> list = dao.find("select trayecto from com.aseo.model.entity.hibernate.TrayectoRuta trayecto where trayecto.estado = " + Estado.INACTIVO + " and" +
				" trayecto.rutaId.rutaId = " + ruta.getRutaId() + " order by trayecto.orden");
		return list;
	}
}
